package com.tsj.spzx.task;

import cn.hutool.core.date.DateUtil;
import com.tsj.spzx.mapper.OrderInfoMapper;
import com.tsj.spzx.mapper.OrderStatisticsMapper;
import com.tsj.spzx.model.entity.order.OrderStatistics;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 定时任务：
 *      每天凌晨2点，从order_info表统计前一天的交易额，保存到到order_statistics表中
 * 目的：
 *      如果每次查询当天销售总金额都从order_info表中查询，当数据量过大时，效率太低，
 *      所以，我们用定时任务把数据先保存到order_statistics表中，查询交易额时直接从order_info表中查询，
 * 使用：
 *      在方法上田添加@Scheduled注解，并设置cron表达式
 *      在项目主类main上添加@EnableScheduling注解
 */

@Slf4j
@Component
public class OrderStatisticsTask {

    @Autowired
    private OrderStatisticsMapper orderStatisticsMapper;
    @Autowired
    private OrderInfoMapper orderInfoMapper;

    @Scheduled(cron = "0 0 2 * * ? ")
//    @Scheduled(cron = "10 * * * * ? ")  测试
    public void createOrderStatistics() {
        // 1、先获取到前一天的日期
        String preDate = DateUtil.offsetDay(DateUtil.date(), -1).toString("yyyy-MM-dd");
        // 2、从order_info表中查询前一天的订单信息（包括交易额，日期，数量）
        OrderStatistics orderStatistics = orderInfoMapper.getOrderStatisticsByDate(preDate);
        // 3、将信息保存到order_statistics表中
        if (orderStatistics != null){
            orderStatisticsMapper.save(orderStatistics);
        }
    }

}
